<?php

/*
 * 测试魔术方法
 * 
 */

namespace IMooc;

class Object {

    private $_property = array();

    public static function test()
    {
        echo __METHOD__;
    }

    //设置类中不存在的属性时,会调用__set魔术方法
    public function __set($key, $value)
    {
        echo __METHOD__, '<br />';
        $this->_property[$key] = $value;
    }

    //访问类中不存在的属性时,会调用__get魔术方法
    public function __get($key)
    {
        echo __METHOD__, '<br />';
        return $this->_property[$key];
    }

    //调用不存在的方法时,会调用该方法
    public function __call($name, $arguments = null)
    {
        var_dump($name, $arguments);
        return 'magic function';
    }

    //调用不存在的静态方法时,会调用该方法
    public static function __callStatic($name, $arguments)
    {
        var_dump($name, $arguments);
        return 'static magic function';
    }

    //将对象以字符串形式输出时,会调用该方法
    public function __toString()
    {
        return __CLASS__;
    }

    //将对象以函数方式进行调用时,
    //如$obj = new Object();
    //$obj($obj);
    //会调用该方法
    public function __invoke($params)
    {
        var_dump($params);
        return 'magic function __invoke';
    }

}
